#include "Race.h"
using namespace std;

DebugLevelType Race::elementaire  = BLANK;
DebugLevelType Race::fonction     = BLANK;

/**
 * Constructeur standard.
 * @param type nom de la race
 */
Race::Race(const string& type)
{
  Type = type;
}

/**
 * Constructeur de copie, réalise une copie profonde.
 * @param race race à copier
 */
Race::Race(const Race& race)
{
  unsigned int taille(race.capacites.size());
  for (unsigned int i(0); i<taille; i++)
    capacites.push_back(race.capacites[i]);
  Type = race.Type;  
}

/**
 * Destructeur, ne fait rien de spécial.
 */
Race::~Race()
{}

/**
 * Retourne la race (càd le nom).
 * @return le nom de la race
 */
string Race::get_Type() const
{
  return Type;
}

/**
 * Retourne le nombre de capacités raciales.
 * @return la dimension du conteneur capacites.
 */
unsigned int Race::get_taille() const
{
  return capacites.size();
}

/**
 * Retourne la capacité désirée.
 * @param i le numéro de la capacité
 * @return la position de la capacité dans la liste
 */
unsigned int Race::get_capa(const unsigned int& i) const
{
  if (i < capacites.size())
    return capacites[i];
  else
    {
      error() << "Compétence inexistante, dépassement de portée" << endreq;
      return 65535;
    }
}

/**
 * Gestion des niveau de sortie des fonctions.
 * @param level le niveau (INFO, DEBUG, ...).
 * @param n permet de sélectionner quel variable est affectée.
 * @see DebugLevelType
 */
void Race::setLevel(const DebugLevelType& level, const unsigned int& n)
{
  switch(n)
    {
    case 1:
      elementaire = level;
      break;
    case 2:
      fonction = level;
      break;
    default:
      warning() << "Variable inconnue, dans Race::setLevel " << n << endreq;
    }
}
